package com.api.entity;


import com.api.log.FieldAnnotation;
import com.mybatisflex.annotation.*;
import com.mybatisflex.core.activerecord.Model;

import java.util.Date;
import java.util.List;


import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import com.fasterxml.jackson.annotation.JsonFormat;
import org.springframework.format.annotation.DateTimeFormat;

/**
* 菜单 实体类。
*
* @author yangsf
* @since 2025-01-14
*/
@Accessors(chain = true)
@Data(staticConstructor = "create")
@EqualsAndHashCode(callSuper = true)
@Table("tb_menus")
public class Menus extends Model<Menus> {

private static final long serialVersionUID = 1L;

    @Id(keyType = KeyType.Auto)
    @FieldAnnotation("id")
    private Long id;

    /**
    * 菜单类型： 1.管理后台
    */
    @FieldAnnotation("菜单类型： 1.管理后台")
    private Integer kind;

    /**
    * 菜单类型： 1.模块 2.功能 3.按钮
    */
    @FieldAnnotation("菜单类型： 1.模块 2.功能 3.按钮")
    private Integer menuType;

    /**
    * 菜单名称
    */
    @FieldAnnotation("菜单名称")
    private String title;

    /**
    * 路由名称
    */
    @FieldAnnotation("路由名称")
    private String menuKey;

    /**
    * 菜单描述
    */
    @FieldAnnotation("菜单描述")
    private String menuDesc;

    /**
     * 接口地址，用于权限划分
     */
    @FieldAnnotation("接口地址，用于权限划分")
    private String menuUrl;

    /**
    * 菜单路由
    */
    @FieldAnnotation("菜单路由")
    private String path;

    /**
    * 菜单图标
    */
    @FieldAnnotation("菜单图标")
    private String menuIcon;

    /**
    * 父级菜单ID，默认0为顶级
    */
    @FieldAnnotation("父级菜单ID，默认0为顶级")
    private Long parentId;

    /**
    * 排序，0-99，默认值为50
    */
    @FieldAnnotation("排序，0-99，默认值为50")
    private Integer sortNum;

    /**
    * 菜单编码
    */
    @FieldAnnotation("菜单编码")
    private String codeNo;

    /**
    * 状态： 1.正常 0.删除
    */
    @FieldAnnotation("状态： 1.正常 0.删除")
    private Integer status;

    /**
    * 是否收费菜单： 1.是 0.否
    */
    @FieldAnnotation("是否收费菜单： 1.是 0.否")
    private Integer isCharge;

    /**
    * 创建时间
    */
    @Column(onInsertValue = "now()")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
    @FieldAnnotation("创建时间")
    private Date createTime;

    /**
    * 创建人
    */
    @FieldAnnotation("创建人")
    private Long createId;

    /**
    * 修改时间
    */
    @Column(onInsertValue = "now()", onUpdateValue = "now()")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
    @FieldAnnotation("修改时间")
    private Date updateTime;

    /**
    * 修改人
    */
    @FieldAnnotation("修改人")
    private Long updateId;

    @RelationManyToOne(selfField = "parentId", targetField = "id")
    private Menus parent;

    @RelationOneToMany(selfField = "id", targetField = "parentId")
    private List<Menus> children;

    @Column(value = "父级菜单名称，如果父级为0，则显示为：顶级父目录",ignore = true)
    private String parentName;

}
